package net.lab1024.sa.base.module.support.elasticsearch.service;

import net.lab1024.sa.base.common.domain.EventBase;
import net.lab1024.sa.base.common.domain.EventBaseAlert;
import net.lab1024.sa.base.common.domain.PageResult;
import net.lab1024.sa.base.module.support.elasticsearch.domain.form.EventBaseEsQueryForm;
import net.lab1024.sa.base.module.support.elasticsearch.domain.form.SoarDisposalForm;

import java.util.List;
import java.util.Map;

/**
 * 安全事件ES服务接口
 *
 * @author chenyuqiang
 * @date 2025-01-27 10:00:00
 */
public interface EventBaseEsService {

    /**
     * 分页查询安全事件
     *
     * @param queryForm 查询表单
     * @return 分页结果
     */
    PageResult<EventBase> queryPage(EventBaseEsQueryForm queryForm);

    /**
     * 条件查询安全事件列表
     *
     * @param queryForm 查询表单
     * @return 事件列表
     */
    List<EventBase> queryList(EventBaseEsQueryForm queryForm);
    List<EventBaseAlert> queryListAlert(EventBaseEsQueryForm queryForm);

    /**
     * 获取安全事件总数
     *
     * @return 总数
     */
    Long getCount();

    /**
     * 获取安全事件总数（指定索引）
     *
     * @param indexName 索引名称
     * @return 总数
     */
    Long getCount(String indexName);

    /**
     * 根据ID查询安全事件详情
     *
     * @param eventId 事件ID
     * @return 事件详情
     */
    EventBase getEventById(String eventId);

    /**
     * 根据ID查询安全事件详情（指定索引）
     *
     * @param eventId 事件ID
     * @param indexName 索引名称
     * @return 事件详情
     */
    EventBase getEventById(String eventId, String indexName);

    /**
     * 获取事件类型统计
     *
     * @return 统计结果
     */
    Map<String, Object> getEventTypeStats();

    /**
     * 获取事件类型统计（指定索引）
     *
     * @param indexName 索引名称
     * @return 统计结果
     */
    Map<String, Object> getEventTypeStats(String indexName);

    /**
     * 获取危险等级统计
     *
     * @return 统计结果
     */
    Map<String, Object> getSeverityStats();

    /**
     * 获取地理位置统计
     *
     * @return 统计结果
     */
    Map<String, Object> getGeoStats();

    /**
     * 获取时间趋势统计
     *
     * @param param 统计参数
     * @return 统计结果
     */
    Map<String, Object> getTimeTrendStats(Map<String, Object> param);

    /**
     * 导出安全事件数据
     *
     * @param queryForm 查询表单
     * @return 导出结果
     */
    String exportEvents(EventBaseEsQueryForm queryForm);

    /**
     * SOAR处置
     *
     * @param disposalForm 处置表单
     * @return 处置结果
     */
    String soarDisposal(SoarDisposalForm disposalForm);
} 